import { login, logout, getInfo, userLoginByPhone } from '@/api/login'
import { getToken, setToken, removeToken } from '@/utils/auth'
import defAva from '@/assets/images/profile.jpg'
import { defineStore } from 'pinia'
import usePermissionStore from './permission'
import { regionsList } from '@/api/match/league'
import { nextTick } from '@vue/runtime-core'

const useUserStore = defineStore('user',
  {
    state: () => ({
      token: getToken(),
      user: null,
      name: '',
      avatar: '',
      roles: [],
      city: {},
      permissions: [],
      manageFlag: 0, // 0 普通用户 1 场馆管理员 2平台管理员 3 开发管理员
      reLogin: false,
      regionsList: []
    }),
    actions: {
      // 登录
      login(userInfo) {
        const username = userInfo.username.trim()
        const password = userInfo.password
        const code = userInfo.code
        const uuid = userInfo.uuid
        return new Promise((resolve, reject) => {
          login(username, password, code, uuid).then(res => {
            setToken(res.data.token)
            this.token = res.data.token
            resolve()
          }).catch(error => {
            reject(error)
          })
        })
      },
      loginPc(telno, captcha) {
        return new Promise((resolve, reject) => {
          userLoginByPhone(telno, captcha).then(res => {
            setToken(res.data.token)
            this.token = res.data.token
            resolve()
          }).catch(error => {
            reject(error)
          })
        })
      },
      // 获取用户信息
      getInfo() {
        return new Promise((resolve, reject) => {
          getInfo().then(res => {
            const user = res.data.user

            let avatar = defAva
            if (user.avatar) {
              if (user.avatar.indexOf('http') > -1) {
                avatar = user.avatar
              } else {
                avatar = import.meta.env.VITE_APP_BASE_API + user.avatar
              }
            }

            if (res.data.roles && res.data.roles.length > 0) { // 验证返回的roles是否是一个非空数组
              this.roles = res.data.roles
              this.permissions = res.data.permissions
            } else {
              this.roles = ['ROLE_DEFAULT']
            }
            this.name = user.userName
            this.avatar = avatar
            this.manageFlag = parseInt(user.manageFlag)
            this.user = user
            // usePermissionStore().addRoute(this.manageFlag)

            this.initOtherData()

            resolve(res)
          }).catch(error => {
            reject(error)
          })
        })
      },
      initOtherData() {
        regionsList().then(res => {
          this.regionsList = res.data
        })
      },
      // 退出系统
      logOut() {
        return new Promise((resolve, reject) => {
          logout(this.token).then(() => {
            this.token = ''
            this.roles = []
            this.permissions = []
            this.user = null
            removeToken()
            resolve()
          }).catch(error => {
            reject(error)
          })
        })
      },
      setCity(city) {
        this.city = city
      },
      setReLogin(flag) {
        this.reLogin = flag
      }
    }
  })

export default useUserStore
